package main

import "fmt"

//颜色值x	0	1	2	3	4	5	6	7
//   颜色	黑	红	绿	黄	蓝	紫	青	白
const (
	textBlack = iota + 30
	textRed
	textGreen
	textYellow
	textBlue
	textPurple
	textCyan
	textWhite
)

func Black(str string) string {
	return textColor(textBlack, str)
}

func Red(str string) string {
	return textColor(textRed, str)
}
func Yellow(str string) string {
	return textColor(textYellow, str)
}
func Green(str string) string {
	return textColor(textGreen, str)
}
func Cyan(str string) string {
	return textColor(textCyan, str)
}
func Blue(str string) string {
	return textColor(textBlue, str)
}
func Purple(str string) string {
	return textColor(textPurple, str)
}
func White(str string) string {
	return textColor(textWhite, str)
}

func textColor(color int, str string) string {
	return fmt.Sprintf("\x1b[0;%dm%s\x1b[0m", color, str)
}
func main() {
	s := "1"
	var rs = Blue(s) + White(s) + Red(s) + Green(s+s)
	fmt.Println(rs)

	// -------------------------
	fmt.Println("")
	// 前景 背景 颜色
	// ---------------------------------------
	// 30 40 黑色
	// 31 41 红色
	// 32 42 绿色
	// 33 43 黄色
	// 34 44 蓝色
	// 35 45 紫红色
	// 36 46 青蓝色
	// 37 47 白色
	//
	// 代码 意义
	// -------------------------
	// 0 终端默认设置
	// 1 高亮显示
	// 4 使用下划线
	// 5 闪烁
	// 7 反白显示
	// 8 不可见
	for b := 40; b <= 47; b++ { // 背景色彩 = 40-47
		for f := 30; f <= 37; f++ { // 前景色彩 = 30-37
			for d := range []int{0, 1, 4, 5, 7, 8} { // 显示方式 = 0,1,4,5,7,8
				fmt.Printf(" %c[%d;%d;%dm%s(f=%d,b=%d,d=%d)%c[0m ", 0x1B, d, b, f, "", f, b, d, 0x1B)
			}
			fmt.Println("")
		}
		fmt.Println("")
	}
}
